/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.ec.socialfun.entidades;

import java.io.Serializable;
import java.util.Date;
import java.util.List;
import javax.persistence.Basic;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlTransient;

/**
 *
 * @author hp
 */
@Entity
@Table(name = "usuario")
@XmlRootElement
@NamedQueries({
    @NamedQuery(name = "Usuario.findAll", query = "SELECT u FROM Usuario u"),
    @NamedQuery(name = "Usuario.findByUsCodigo", query = "SELECT u FROM Usuario u WHERE u.usCodigo = :usCodigo"),
    @NamedQuery(name = "Usuario.findByUsCorreo", query = "SELECT u FROM Usuario u WHERE u.usCorreo = :usCorreo"),
    @NamedQuery(name = "Usuario.findByUsContrasena", query = "SELECT u FROM Usuario u WHERE u.usContrasena = :usContrasena"),
    @NamedQuery(name = "Usuario.findByUsFechaCreacion", query = "SELECT u FROM Usuario u WHERE u.usFechaCreacion = :usFechaCreacion"),
    @NamedQuery(name = "Usuario.findByUsFechaUltimoCambio", query = "SELECT u FROM Usuario u WHERE u.usFechaUltimoCambio = :usFechaUltimoCambio"),
    @NamedQuery(name = "Usuario.findByUsEstado", query = "SELECT u FROM Usuario u WHERE u.usEstado = :usEstado"),
    @NamedQuery(name = "Usuario.findByUsTipo", query = "SELECT u FROM Usuario u WHERE u.usTipo = :usTipo"),
    @NamedQuery(name = "Usuario.findByUsNombre", query = "SELECT u FROM Usuario u WHERE u.usNombre = :usNombre"),
    @NamedQuery(name = "Usuario.findByUsPrimerApellido", query = "SELECT u FROM Usuario u WHERE u.usPrimerApellido = :usPrimerApellido"),
    @NamedQuery(name = "Usuario.findByUsSegundoApellido", query = "SELECT u FROM Usuario u WHERE u.usSegundoApellido = :usSegundoApellido"),
    @NamedQuery(name = "Usuario.findByUsTelefono", query = "SELECT u FROM Usuario u WHERE u.usTelefono = :usTelefono"),
    @NamedQuery(name = "Usuario.findByUsDireccion", query = "SELECT u FROM Usuario u WHERE u.usDireccion = :usDireccion"),
    @NamedQuery(name = "Usuario.findByUsFechaNacimiento", query = "SELECT u FROM Usuario u WHERE u.usFechaNacimiento = :usFechaNacimiento"),
    @NamedQuery(name = "Usuario.findByUsSexo", query = "SELECT u FROM Usuario u WHERE u.usSexo = :usSexo"),
    @NamedQuery(name = "Usuario.findByUsImagen", query = "SELECT u FROM Usuario u WHERE u.usImagen = :usImagen"),
    @NamedQuery(name = "Usuario.findByUsTarjeta", query = "SELECT u FROM Usuario u WHERE u.usTarjeta = :usTarjeta"),
    @NamedQuery(name = "Usuario.findByUsKey", query = "SELECT u FROM Usuario u WHERE u.usKey = :usKey"),
    @NamedQuery(name = "Usuario.recuperaIngresadoPorCodigo", query = "SELECT u FROM Usuario u WHERE u.usCodigo = :codigo AND u.usEstado = :estado"),
    @NamedQuery(name = "Usuario.recuperaIngresadoOActivoPorCorreo", query = "Select u FROM Usuario u WHERE u.usCorreo = :mail AND u.usEstado IN ('ING' ,'ACT' )"),
    @NamedQuery(name = "Usuario.recuperaIngresadoPorCodigoActivacion", query = "SELECT u FROM Usuario u WHERE u.usCodigoActivacion = :codigoActivacion AND u.usEstado = :estado"),
    @NamedQuery(name= "Usuario.contadorUsuarios", query = "SELECT 1000 + COUNT(*) FROM Usuario u where u.usEstado = :estado AND u.usTipo = :tipo")})
public class Usuario implements Serializable {
    
    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Basic(optional = false)
    @Column(name = "US_CODIGO")
    private Integer usCodigo;
    @Basic(optional = false)
    @Column(name = "US_CORREO")
    private String usCorreo;
    @Basic(optional = false)
    @Column(name = "US_CONTRASENA")
    private String usContrasena;
    @Basic(optional = false)
    @Column(name = "US_FECHA_CREACION")
    @Temporal(TemporalType.TIMESTAMP)
    private Date usFechaCreacion;
    @Basic(optional = false)
    @Column(name = "US_FECHA_ULTIMO_CAMBIO")
    @Temporal(TemporalType.TIMESTAMP)
    private Date usFechaUltimoCambio;
    @Basic(optional = false)
    @Column(name = "US_ESTADO")
    private String usEstado;
    @Basic(optional = false)
    @Column(name = "US_TIPO")
    private String usTipo;
    @Basic(optional = false)
    @Column(name = "US_NOMBRE")
    private String usNombre;
    @Basic(optional = false)
    @Column(name = "US_PRIMER_APELLIDO")
    private String usPrimerApellido;
    @Column(name = "US_SEGUNDO_APELLIDO")
    private String usSegundoApellido;
    @Column(name = "US_TELEFONO")
    private String usTelefono;
    @Column(name = "US_DIRECCION")
    private String usDireccion;
    @Column(name = "US_FECHA_NACIMIENTO")
    @Temporal(TemporalType.TIMESTAMP)
    private Date usFechaNacimiento;
    @Column(name = "US_SEXO")
    private String usSexo;
    @Column(name = "US_IMAGEN")
    private String usImagen;
    @Column(name = "US_TARJETA")
    private String usTarjeta;
    @Column(name = "US_KEY")
    private String usKey;
    @Column(name = "US_CODIGO_ACTIVACION")
    private String usCodigoActivacion;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "usCodigo")
    private List<UsuarioSucursal> usuarioSucursalList;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "usCodigo")
    private List<EventoUsuario> eventoUsuarioList;
    @JoinColumn(name = "ZO_CODIGO", referencedColumnName = "ZO_CODIGO")
    @ManyToOne(optional = false)
    private Zona zoCodigo;
    @JoinColumn(name = "OP_CODIGO", referencedColumnName = "OP_CODIGO")
    @ManyToOne
    private Operadora opCodigo;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "usCodigo")
    private List<Membresia> membresiaList;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "usCodigo")
    private List<UsuarioRol> usuarioRolList;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "usCodigo")
    private List<ResultadoEventoInteres> resultadoEventoInteresList;
  

    public Usuario() {
    }

    public Usuario(Integer usCodigo) {
        this.usCodigo = usCodigo;
    }

    public Usuario(Integer usCodigo, String usCorreo, String usContrasena, Date usFechaCreacion, Date usFechaUltimoCambio, String usEstado, String usTipo, String usNombre, String usPrimerApellido, Date usFechaNacimiento, String usSexo,
            String usCodigoActivacion) {
        this.usCodigo = usCodigo;
        this.usCorreo = usCorreo;
        this.usContrasena = usContrasena;
        this.usFechaCreacion = usFechaCreacion;
        this.usFechaUltimoCambio = usFechaUltimoCambio;
        this.usEstado = usEstado;
        this.usTipo = usTipo;
        this.usNombre = usNombre;
        this.usPrimerApellido = usPrimerApellido;
        this.usFechaNacimiento = usFechaNacimiento;
        this.usSexo = usSexo;
        this.usCodigoActivacion = usCodigoActivacion;
    }

    public Integer getUsCodigo() {
        return usCodigo;
    }

    public void setUsCodigo(Integer usCodigo) {
        this.usCodigo = usCodigo;
    }

    public String getUsCorreo() {
        return usCorreo;
    }

    public void setUsCorreo(String usCorreo) {
        this.usCorreo = usCorreo;
    }

    public String getUsContrasena() {
        return usContrasena;
    }

    public void setUsContrasena(String usContrasena) {
        this.usContrasena = usContrasena;
    }

    public Date getUsFechaCreacion() {
        return usFechaCreacion;
    }

    public void setUsFechaCreacion(Date usFechaCreacion) {
        this.usFechaCreacion = usFechaCreacion;
    }

    public Date getUsFechaUltimoCambio() {
        return usFechaUltimoCambio;
    }

    public void setUsFechaUltimoCambio(Date usFechaUltimoCambio) {
        this.usFechaUltimoCambio = usFechaUltimoCambio;
    }

    public String getUsEstado() {
        return usEstado;
    }

    public void setUsEstado(String usEstado) {
        this.usEstado = usEstado;
    }

    public String getUsTipo() {
        return usTipo;
    }

    public void setUsTipo(String usTipo) {
        this.usTipo = usTipo;
    }

    public String getUsNombre() {
        return usNombre;
    }

    public void setUsNombre(String usNombre) {
        this.usNombre = usNombre.toUpperCase();
    }

    public String getUsPrimerApellido() {
        return usPrimerApellido;
    }

    public void setUsPrimerApellido(String usPrimerApellido) {
        this.usPrimerApellido = usPrimerApellido.toUpperCase();
    }

    public String getUsSegundoApellido() {
        return usSegundoApellido;
    }

    public void setUsSegundoApellido(String usSegundoApellido) {
        this.usSegundoApellido = usSegundoApellido.toUpperCase();
    }

    public String getUsTelefono() {
        return usTelefono;
    }

    public void setUsTelefono(String usTelefono) {
        this.usTelefono = usTelefono.replaceAll("-", "");
    }

    public String getUsDireccion() {
        return usDireccion;
    }

    public void setUsDireccion(String usDireccion) {
        this.usDireccion = usDireccion.toUpperCase();
    }

    public Date getUsFechaNacimiento() {
        return usFechaNacimiento;
    }

    public void setUsFechaNacimiento(Date usFechaNacimiento) {
        this.usFechaNacimiento = usFechaNacimiento;
    }

    public String getUsSexo() {
        return usSexo;
    }

    public void setUsSexo(String usSexo) {
        this.usSexo = usSexo;
    }

    public String getUsImagen() {
        return usImagen;
    }

    public void setUsImagen(String usImagen) {
        this.usImagen = usImagen;
    }

    public String getUsTarjeta() {
        return usTarjeta;
    }

    public void setUsTarjeta(String usTarjeta) {
        this.usTarjeta = usTarjeta;
    }

    public String getUsKey() {
        return usKey;
    }

    public void setUsKey(String usKey) {
        this.usKey = usKey;
    }

    public String getUsCodigoActivacion() {
        return usCodigoActivacion;
    }

    public void setUsCodigoActivacion(String usCodigoActivacion) {
        this.usCodigoActivacion = usCodigoActivacion;
    }

    @XmlTransient
    public List<UsuarioSucursal> getUsuarioSucursalList() {
        return usuarioSucursalList;
    }

    public void setUsuarioSucursalList(List<UsuarioSucursal> usuarioSucursalList) {
        this.usuarioSucursalList = usuarioSucursalList;
    }

    @XmlTransient
    public List<EventoUsuario> getEventoUsuarioList() {
        return eventoUsuarioList;
    }

    public void setEventoUsuarioList(List<EventoUsuario> eventoUsuarioList) {
        this.eventoUsuarioList = eventoUsuarioList;
    }

    public Zona getZoCodigo() {
        return zoCodigo;
    }

    public void setZoCodigo(Zona zoCodigo) {
        this.zoCodigo = zoCodigo;
    }

    public Operadora getOpCodigo() {
        return opCodigo;
    }

    public void setOpCodigo(Operadora opCodigo) {
        this.opCodigo = opCodigo;
    }

    @XmlTransient
    public List<Membresia> getMembresiaList() {
        return membresiaList;
    }

    public void setMembresiaList(List<Membresia> membresiaList) {
        this.membresiaList = membresiaList;
    }

    @XmlTransient
    public List<UsuarioRol> getUsuarioRolList() {
        return usuarioRolList;
    }

    public void setUsuarioRolList(List<UsuarioRol> usuarioRolList) {
        this.usuarioRolList = usuarioRolList;
    }

    @Override
    public int hashCode() {
        int hash = 0;
        hash += (usCodigo != null ? usCodigo.hashCode() : 0);
        return hash;
    }

    @Override
    public boolean equals(Object object) {
        // TODO: Warning - this method won't work in the case the id fields are not set
        if (!(object instanceof Usuario)) {
            return false;
        }
        Usuario other = (Usuario) object;
        if ((this.usCodigo == null && other.usCodigo != null) || (this.usCodigo != null && !this.usCodigo.equals(other.usCodigo))) {
            return false;
        }
        return true;
    }

    @Override
    public String toString() {
       return "com.ec.socialfun.entidades.Usuario[ usCodigo=" + usCodigo + " ]";
    }

    @XmlTransient
    public List<ResultadoEventoInteres> getResultadoEventoInteresList() {
        return resultadoEventoInteresList;
    }

    public void setResultadoEventoInteresList(List<ResultadoEventoInteres> resultadoEventoInteresList) {
        this.resultadoEventoInteresList = resultadoEventoInteresList;
    }
}
